package com.szrt.day20170505.ch03;


/**
 * 用链表模拟队列 ： 先进先出  后进后出
 * @author zsrt
 *
 */
public class Queue {
	
	
	
	private Node head;
	
	
	public Queue(){}
	
	
	public Queue(Node head){
		this.head = head;
	}
	
	
	/**
	 * 忘队列中添加1个节点
	 * @param node
	 */
	public void push(Node node){
		
		//1 找到头节点
		
		Node p  = this.head;
		
		//1.1 当前链表中只有1个节点：头结点：最后一个节点  下一个节点为空
		
		if(p.getNext() == null){
			
			//当前链表中只有1个节点
			p.setNext(node);
			
			//下面的代码不要执行?
			return;
		}
		
		
		//1.2 说明当前链表中会有多个节点 循环找到最后一个节点
		while(true){
			//什么时候结束? 当前节点的下一个节点为null
			if(p.getNext()== null){
				
				p.setNext(node);
				
				break;
			}
			
			if(p.getNext()!=null){
				
				//循环起来
				p = p.getNext();
			}
			
			
			
		}
		
		
		
		
	}
	
	
	/**
	 * 从队列中删除1个元素 每次删除的都是头节点的下一个节点
	 * @return
	 */
	public Node pop(){
		
		
		//1 找到头节点
		
		Node p  = this.head;
		
		
		if(p.getNext() == null){
			//说明值剩下 头节点
			System.out.println("没有人拉...");
		}else{
			
			//找到返回的节点
			Node jieguo  = p.getNext();
			
			
			//最少还有1个人
			p.setNext(p.getNext().getNext());
			return jieguo;
		}
		
		return null;
	}
	
	
	/**
	 * 打印队列中所有的元素
	 */
	public void printQueue(){}
	
	
	/**
	 * 把updateNode的值修改成updateValue
	 * @param updateNode
	 * @param updateValue
	 */
	public void updateNode(Node updateNode, int updateValue){};

	
	
}
